package com.ssy.lingxi.pay.api.dto.request.eAccount;

import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;

/**
 * e账号订单支付实体
 * @author jw.chen
 * @version 2.0.0
 * @date 2021/12/9
 */
@Data
public class EAccountOrderPayRequest implements Serializable {
    private static final long serialVersionUID = -7861596822021732472L;

    /**
     * 商户订单号
     */
    @NotBlank(message = "支付订单编码不能为空")
    @Size(max = 32, message = "支付订单编码最长32个字符")
    private String orderCode;

    /**
     * 会员id(付款方)
     */
    @NotNull(message = "付款方会员id要大于0")
    @Positive(message = "付款方会员id要大于0")
    private Long payMemberId;

    /**
     * 会员角色id(付款方)
     */
    @NotNull(message = "付款方角色id要大于0")
    @Positive(message = "付款方角色id要大于0")
    private Long payMemberRoleId;

    /**
     * 会员id(收款方)
     */
    private Long memberId;

    /**
     * 会员角色id(收款方)
     */
    private Long memberRoleId;

    /**
     * 金额
     */
    private Double payMoney;

    /**
     * 多个收款方时需要传
     */
    @Valid
    private List<ReceiveRequest> receiveList;

    /**
     * 服务类型: serviceTypeEnum类
     */
    @NotNull(message = "服务类型不能为空")
    private String serviceType;

    /**
     * 商品描述
     */
    private String remark;

    /**
     * 附加数据--在查询API和支付通知中原样返回
     */
    private String attach;

    /**
     * 支付类型: 1-平台; 2-会员;
     */
    @NotNull(message = "资金归集模式不能为空")
    @Min(value = 1, message = "资金归集模式不能为空")
    @Max(value = 2, message = "资金归集模式不能为空")
    private Integer payType;

    /**
     * 支付渠道: 1-余额支付; 2-平台Web支付(微信); 3-平台Web支付(支付宝); 4-APP支付(微信); 5-APP支付(支付宝); 6-小程序支付(微信); 7-快捷支付; 8-网银支付; 9-h5微信支付
     * EAccountPayChannelEnum.class
     */
    private Integer payChannel;

    /**
     * 小程序登录凭证code，微信小程序和微信App支付的参数
     */
    private String jsCode;

    /**
     * 用于缓存订单参数的随机字符串
     */
    private String nonce;
    /**
     * 用户下单及调起支付的终端 IP 注：最大长度 16
     * 微信h5支付必传
     */
   // private String cusIp;
}
